import { Controller } from 'egg';
import {Op} from 'sequelize'
export default class BannerController extends Controller {
    
    //banner列表接口
    /**
     * @api {get} /manage/banner_list banner列表(管理员)
     * @apiName manageBannerList
     * @apiGroup Banner
     * @apiVersion 1.0.0
     * @apiDescription banner列表(管理员)
     * @apiParam {String} keyword  关键字查询
     * @apiParam {Number} page  页面位置
     * @apiParam {Number} page_size  页面尺寸
     * @apiSuccess {Number} code 返回状态码 0失败  200成功
     * @apiSuccess {String} message 返回状态对应提示消息
     * @apiSuccess {Object} data 查询数组集合
     * @apiSuccess {Object[]} data.data_info 查询数组集合
     * @apiSuccess {String} data.data_info.banner_id 导航Id
     * @apiSuccess {String} data.data_info.banner_name 导航名称
     * @apiSuccess {String} data.data_info.banner_img 导航图片路径
     * @apiSuccess {String} data.data_info.link 导航对应请求路径
     * @apiSuccess {String} data.page_count 页码总数
     * @apiSuccess {String} data.data_count 数据总数
     * 
     */
    /**
     * banner列表集合查询
     */
    async list(){
        const {ctx}=this;
        const {query}=ctx.request;
        let condition={};
        try {
            if(query.keyword){
                let keyword=query.keyword;
                condition['banner_name']={[Op.like]: '%'+ keyword +'%'};
            }
            let order_condition=[
                ['create_time', 'DESC']
            ];
            ctx.body=await ctx.service.common.find_and_count_all(condition,order_condition,query,'Banner');
        } catch (error) {
            ctx.body=ctx.helper.error_result("查询异常");
        }
    }

    //banner新增接口
    /**
     * @api {post} /manage/banner_add banner新增(管理员)
     * @apiName manageBannerAdd
     * @apiGroup Banner
     * @apiVersion 1.0.0
     * @apiDescription banner新增(管理员)
     * @apiParam {String} banner_name  banner名称
     * @apiParam {Number} link  banner对应模块
     * @apiParam {String} banner_img  banner图片路径
     * @apiSuccess {Number} code 返回状态码 0失败  200成功
     * @apiSuccess {String} message 返回状态对应提示消息
     * 
     */
    /**
     * 新增banner 逻辑处理
     */
    async add(){
        const {ctx,app}=this;
        const {body}=ctx.request
        if(!body.banner_img){return ctx.body=ctx.helper.error_result("必须指定banner路径");}
        try {
            let result=await app.model.Banner.create(body);
            if(result&&result['banner_id']){
                return ctx.body=ctx.helper.success_result("操作成功");
            }  
        } catch(error){
            console.log(error)
        }finally{
          await ctx.cleanupRequestFiles();
        }
        ctx.body=ctx.helper.error_result("添加失败")
    }
    //banner修改接口
    /**
     * @api {post} /manage/banner_update banner修改(管理员)
     * @apiName manageBannerUpdate
     * @apiGroup Banner
     * @apiVersion 1.0.0
     * @apiDescription banner修改(管理员)
     * @apiParam {Number}  banner_id bannerID
     * @apiParam {String}  banner_img 图片路径
     * @apiParam {String} banner_name  banner名称
     * @apiParam {Number} link  对应模块 1 首页 2产品中心 3解决方案 4 导航图 5客户案例 6关于我们
     * @apiSuccess {Number} code 返回状态码 0失败  200成功
     * @apiSuccess {String} message 返回状态对应提示消息
     * 
     */
    /**
     * 过程：
     *  查询banner,获取banner图路径，更新数据库中banner图路径，
     * 根据banner路径删除之前的banner所在的文件
     */
    async update(){
        const {ctx,app} = this;
        let {body}=ctx.request;
        let {Banner}=app.model;
        if(!body.banner_id){
            return ctx.body=ctx.helper.error_result("没有指定需要修改的导航图ID")
        }
        let update_obj=body;
        try {
            let banner:any=await Banner.findByPk(body.banner_id);
            if(!banner||!banner['banner_id']){
                return ctx.body=ctx.helper.error_result("未找到该导航图");
            }
            if(!update_obj['banner_img']){
                delete update_obj['banner_img']
            }
            let result=await Banner.update({...update_obj},{where:{banner_id:body.banner_id}});
            if(result){
                if(banner['banner_img']&&body.banner_img){
                    ctx.service.common.un_link_file(banner['banner_img'])
                }
                return ctx.body=ctx.helper.success_result("修改导航图成功");
            }
        } catch (error) {
            console.log(error)
        }
        ctx.body=ctx.helper.error_result("修改导航图失败");
    }
    //banner删除接口
    /**
     * @api {post} /manage/banner_del banner删除(管理员)
     * @apiName manageBannerDel
     * @apiGroup Banner
     * @apiVersion 1.0.0
     * @apiDescription banner删除(管理员)
     * @apiParam {Number}  banner_id bannerID
     * @apiSuccess {Number} code 返回状态码 0失败  200成功
     * @apiSuccess {String} message 返回状态对应提示消息
     * 
     */
    /**
     * 过程：
     *  查询banner,获取banner图路径，删除之前的banner对象
     * 根据banner路径删除之前的banner所在的文件
     */
    async del(){
        const {ctx,app} = this;
        let {body}=ctx.request;
        let {Banner}=app.model;
        if(!body.banner_id){
            return ctx.body=ctx.helper.error_result("没有指定需要修改的导航图ID")
        } 
        try {
            let banner:any=await Banner.findByPk(body.banner_id);
            if(!banner||!banner['banner_id']){
                return ctx.body=ctx.helper.error_result("未找到该导航图");
            }
            let result=await Banner.destroy({where:{banner_id:body.banner_id}}); 
            if(result){
                if(banner['banner_img']){
                    ctx.service.common.un_link_file(banner['banner_img'])
                }
                return ctx.body=ctx.helper.success_result("删除成功");
            }else{
                return ctx.body=ctx.helper.success_result("未删除数据");
            }
        } catch (error) {
            console.log(error);
        }
        ctx.body=ctx.helper.error_result("删除导航图失败")
    }
    /**
     * @api {get} /manage/banner_info banner详情(管理员)
     * @apiName manageBannerInfo
     * @apiGroup Banner
     * @apiVersion 1.0.0
     * @apiDescription banner详情(管理员)
     * @apiParam {Number}  banner_id bannerID
     * @apiSuccess {Number} code 返回状态码 0失败  200成功
     * @apiSuccess {String} message 返回状态对应提示消息
     * @apiSuccess {Object} data 返回状态对应提示消息
     * @apiSuccess {Number} data.banner_id bannerID
     * @apiSuccess {String} data.banner_name banner名称
     * @apiSuccess {String} data.banner_img 导航图片路径
     * @apiSuccess {String} data.link 导航对应模块
     * 
     */
    /**
     * 查询banner详情
     */
    async info(){
        const {ctx}=this;
        const {query}=ctx.request;
        let condition={};
        try {
            if(!query.banner_id){
                return ctx.body=ctx.helper.error_result("需要指定需要查询的导航ID")
            }
            condition['banner_id']=query.banner_id;
            let result=await ctx.service.common.find_one(condition,"Banner","banner_id");
            return ctx.body=ctx.helper.success_result("查询成功",result);
        } catch (error) {
        }
        ctx.body=ctx.helper.error_result("查询异常");
    }
}

